package com.lanxiao.cloud.modules.oauth.domain.service;

import com.lanxiao.cloud.common.core.enums.MethodEnum;
import com.lanxiao.cloud.common.mybatis.service.BaseService;
import com.lanxiao.cloud.common.redis.template.RedisTemplateUtils;
import com.lanxiao.cloud.modules.oauth.infrastructure.constant.OauthRedisConstant;
import java.util.List;
import com.lanxiao.cloud.modules.oauth.domain.model.Permission;

/**
 * @author ：qiaoliang
 * @date ：2021-08-25
 */
public interface IPermissionService extends BaseService<Long, Permission> {

  void savePermission(Permission permission);

  void updatePermission(Permission permission);

  void deletePermission(Long id);

  void updateState(Long id);

  /**
   *  获取用户权限
   *
   * @author ：qiaoliang
   * @param userId : 用户ID
   * @return boolean
   * @date 2021-08-25 16:55
   */
  List<Permission> getUserPermission(Long userId);

  /**
   *  校验权限唯一字段是否重复（主键不为空时，校验非主键的权限其余内容）
   *
   * @author ：qiaoliang
   * @param id : 主键
   * @param mark : 标识
   * @param url : 请求url
   * @param method : 请求类型
   * @param path : 路由地址
   * @date 2021-09-16 09:27
   */
  void checkRepeatPermission(Long id, String mark, String url, MethodEnum method, String path);

  /**
   *  校验用户是否有权限访问
   *
   * @author ：qiaoliang
   * @param userId : 用户ID
   * @param url :  请求地址
   * @param method : 请求类型
   * @date 2021-08-25 17:31
   */
  void checkUserPermission(Long userId, String url, MethodEnum method);

  /**
   *  初始化所有权限
   *
   * @author ：qiaoliang

   * @date 2021-09-16 10:50
   */
  default void initCache(){
    RedisTemplateUtils.delete(OauthRedisConstant.OAUTH_PERMISSION);
    RedisTemplateUtils.delete(OauthRedisConstant.OAUTH_URL_PERMISSION);
  }

}
